﻿using System;
using System.Collections.Generic;
using System.Data;

namespace DSA4_Heldenerstellung
{
    public class Held_C
    {
        public Held_C()
        {
            Name = "";
            Geschlecht = "";
            Grundpunkte = 110;
            Abenteuerpunkte = 0;

            Rassen = new List<Rasse_C>();
            VerarbeiteRassen();
            Rasse = null;

            Kulturen = new List<Kultur_C>();
            Kultur = null;

            Professionen = new List<Profession_C>();
            ProfessionPrim = null;
            ProfessionSek = null;

            Eigenschaften = new Dictionary<string, ushort>();
            Eigenschaften.Add("MU", 0);
            Eigenschaften.Add("KL", 0);
            Eigenschaften.Add("IN", 0);
            Eigenschaften.Add("CH", 0);
            Eigenschaften.Add("FF", 0);
            Eigenschaften.Add("GE", 0);
            Eigenschaften.Add("KK", 0);
            Eigenschaften.Add("KO", 0);

            EigenschaftenMin = new Dictionary<string, ushort>();
            EigenschaftenMin.Add("MU", 0);
            EigenschaftenMin.Add("KL", 0);
            EigenschaftenMin.Add("IN", 0);
            EigenschaftenMin.Add("CH", 0);
            EigenschaftenMin.Add("FF", 0);
            EigenschaftenMin.Add("GE", 0);
            EigenschaftenMin.Add("KK", 0);
            EigenschaftenMin.Add("KO", 0);

            Vorteile = new List<VorNachteile_C>();

            Nachteile = new List<VorNachteile_C>();

            Sonderfertigkeiten = new List<Sonderfertigkeit_C>();

            TalenteGesellschaft = new List<Talent_C>();
            TalenteHandewerk = new List<Talent_C>();
            TalenteKampf = new List<Talent_C>();
            TalenteKoerper = new List<Talent_C>();
            TalenteNatur = new List<Talent_C>();
            TalenteSonstige = new List<Talent_C>();
            TalenteSprachen = new List<Talent_C>();
            TalenteWissen = new List<Talent_C>();

        }

        public String Name;
        public String Geschlecht;
        public Int16 Grundpunkte { get; set; }
        public Int16 Abenteuerpunkte { get; set; }

        public List<Rasse_C> Rassen { get; set; }
        public Rasse_C Rasse { get; set; }

        public List<Kultur_C> Kulturen { get; set; }
        public Kultur_C Kultur { get; set; }

        public List<Profession_C> Professionen { get; set; }
        public Profession_C ProfessionPrim { get; set; }
        public Profession_C ProfessionSek { get; set; }

        public Dictionary<String, UInt16> Eigenschaften { get; set; }
        public Dictionary<String, UInt16> EigenschaftenMin { get; set; }

        public List<VorNachteile_C> Vorteile { get; set; }
        public List<VorNachteile_C> Nachteile { get; set; }

        public List<Sonderfertigkeit_C> Sonderfertigkeiten { get; set; }

        public List<Talent_C> TalenteKampf { get; set; }
        public List<Talent_C> TalenteKoerper { get; set; }
        public List<Talent_C> TalenteGesellschaft { get; set; }
        public List<Talent_C> TalenteNatur { get; set; }
        public List<Talent_C> TalenteHandewerk { get; set; }
        public List<Talent_C> TalenteWissen { get; set; }
        public List<Talent_C> TalenteSprachen { get; set; }
        public List<Talent_C> TalenteSonstige { get; set; }

        public void VerarbeiteRassen()
        {
            // Liste löschen
            Rassen.Clear();

            // Liste neu aus XML einlesen
            DataSet Daten = new DataSet();
            try
            {
                Daten.ReadXml(@"daten\Rassen.xml");
            }
            catch (Exception)
            {
                throw;
            }

            // Für jede Reihe ein Element initialisieren
            foreach (DataRow Item in Daten.Tables["Rasse"].Rows)
	        {
                Rassen.Add(new Rasse_C(Item));
	        }
        }

        public void VerarbeiteKulturen()
        {
            // Liste löschen
            Kulturen.Clear();

            // Kultur löschen
            Kultur = null;

            // Liste neu aus XML einlesen
            DataSet Daten = new DataSet();
            try
            {
                Daten.ReadXml(@"daten\Kulturen.xml");
            }
            catch (Exception)
            {
                throw;
            }

            // Für jede Reihe ein Element initialisieren
            foreach (DataRow Item in Daten.Tables["Kultur"].Rows)
            {
                if (Rasse.Kulturen.Contains(Item["Kultur_Name"].ToString()))
                {
                    Kulturen.Add(new Kultur_C(Item));
                }
            }
            Kulturen.Sort();
        }

        public void VerarbeiteProfessionen()
        {
            // Liste löschen
            Professionen.Clear();

            // Profession zurücksetzem
            ProfessionPrim = null;
            ProfessionSek = null;

            if ((Rasse != null) && (Kultur != null))
            {
                // Liste neu aus XML einlesen
                DataSet Daten = new DataSet();
                try
                {
                    Daten.ReadXml(@"daten\Professionen.xml");
                }
                catch (Exception)
                {
                    throw;
                }

                // Für jede Reihe ein Element initialisieren
                foreach (DataRow Item in Daten.Tables["Profession"].Rows)
                {
                    if (Kultur.Professionen.Contains(Item["Name"].ToString()))
                    {
                        Professionen.Add(new Profession_C(Item));
                    }
                }
                Professionen.Sort();
            }
        }

        public void VerarbeiteVorNachteile(List<VorNachteile_C> VorNachteil, String Quelle)
        {
            // Liste löschen
            VorNachteil.Clear();

            if ((Rasse != null) && (Kultur != null) && (ProfessionPrim != null))
            {
                // Liste neu aus XML einlesen
                DataSet Daten = new DataSet();
                try
                {
                    Daten.ReadXml(Quelle);
                }
                catch (Exception)
                {
                    throw;
                }

                // Für jede Reihe ein Element initialisieren
                foreach (DataRow Item in Daten.Tables["Vorteil"].Rows)
                {
                    VorNachteil.Add(new VorNachteile_C(Item));
                }
            }
        }

    }
}